package cn.com.sinux.spring.utils;

import cn.com.sinux.spring.commons.OrderCollection;
import cn.com.sinux.spring.commons.PageHelper;
import org.apache.commons.lang.StringUtils;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;

import java.util.Collections;

/**
 * Created:14-7-02 上午11:44
 *
 * @author <a href="mailto:Oujianlin@sinosoft.co"> Oujianlin </a>
 * @version 1.0
 */
public class PageUtils {
    /**
     * 一个通用的创建分页请求的方法
     *
     * @param pageNumber 页码
     * @param pageSize   一页内数据条数
     * @param sortField  排序字段
     * @return
     */
    public static <T> PageHelper<T> buildPageRequest(int pageNumber, int pageSize, String sortField, String orderType) {
        Sort sort = null;
        Direction sortTypeEnum = Direction.DESC;
        if (StringUtils.isNotBlank(orderType) && AppConfig.SORT_TYPE_ASC.equals(orderType.toLowerCase())) {
            sortTypeEnum = Direction.ASC;
        }
        if (StringUtils.isNotBlank(sortField)) {
            sort = new Sort(sortTypeEnum, sortField);

        }
        pageNumber = (pageNumber <= 0) ? 1 : pageNumber;
        pageSize = (pageSize <= 0) ? AppConfig.PAGE_SIZE_DEFAULT : pageSize;
        return sort == null ? new PageHelper<T>(pageNumber - 1, pageSize) : new PageHelper<T>(pageNumber - 1, pageSize, sort);
    }

    /**
     * 一个通用的创建分页请求的方法
     *
     * @param pageNumber      页码
     * @param pageSize        一页内数据条数
     * @param orderCollection 排序字段集合
     * @return
     */
    public static <T> PageHelper<T> buildPageRequest(int pageNumber, int pageSize, OrderCollection orderCollection) {
        Sort sort = new Sort(orderCollection.getOrders());
        pageNumber = (pageNumber <= 0) ? 1 : pageNumber;
        pageSize = (pageSize <= 0) ? AppConfig.PAGE_SIZE_DEFAULT : pageSize;
        return new PageHelper<T>(pageNumber - 1, pageSize, sort);
    }

    public static <T> PageImpl<T> emptyPage(Pageable pageable) {
        return new PageImpl<T>(Collections.<T>emptyList(), pageable, 0);
    }

    /**
     * 一个通用的创建分页请求的方法
     *
     * @param pageNumber 页码
     * @param pageSize   一页内数据条数
     * @return
     */
    public static <T> PageHelper<T> buildPageRequest(int pageNumber, int pageSize) {
        return buildPageRequest(pageNumber, pageSize, null, null);
    }

    public static <T> PageHelper<T> buildPageRequest(int pageNumber, int pageSize, String sortField, String sortField1, String orderType) {
        Sort sort = null;
        Direction sortTypeEnum = Direction.DESC;
        if (StringUtils.isNotBlank(orderType) && AppConfig.SORT_TYPE_ASC.equals(orderType.toLowerCase())) {
            sortTypeEnum = Direction.ASC;
        }
        if (StringUtils.isNotBlank(sortField)) {
            sort = new Sort(sortTypeEnum, sortField, sortField1);

        }
        pageNumber = (pageNumber <= 0) ? 1 : pageNumber;
        pageSize = (pageSize <= 0) ? AppConfig.PAGE_SIZE_DEFAULT : pageSize;
        return sort == null ? new PageHelper<T>(pageNumber - 1, pageSize) : new PageHelper<T>(pageNumber - 1, pageSize, sort);
    }
}
